能不能通过修改指针的指向来修改指针所指向的变量的值

这里主要是指的是字符串指针
比如

 比如 char s1[]="hello"; s=s1; char *t="www",我想让s内容变成"hellowww" 可以通过直接使用指针指向来做么,不要string.h函数 不要循环赋值。就是想通过修改指针指向来做

这个可以实现么 不要函数不要循环复制 为什么不能让s+5=t,就是让它接下来指向t的地址呢

如果s1和t这两个字符串在内存连续的话,那么s=s1,s+6==t是真,C的字符串需要额外的计算一个字符串结束符\0

如果你的问题是是不是能够修改指针的值来修改指针指向的数据,这个是可以的,并且在C中也很常见,前提就是你得准确的知道你的源地址和目标地址的偏移,以及目标地址存储的数据类型,这样才能正确的提取出你要的数据

比较经典的例子是linux kernel list.h中的宏

 #define container_of(ptr, type, member) ({ \

    const typeof(((type *)0)->member ) *__mptr = (ptr); \

    (type *)((char *)__mptr - ((size_t) &((type *)0)->member));})

你这个s1和t指向的地址并不是相邻的

s+5 = t 是会报错的,因为s+5 不是一个可以被赋值的左值表达式,找不到赋值对象,没有意义。
假定你的s是一个字符指针,那么s+5是一个地址,可以看做是一个暂时的常量。所以你无法通过赋值改变s+5 的值使其变为t指向的地址。

同时,你如果直接通过循环赋值,即

 for( int  i = 0; i < 3; i++)
     *( s + 5 + i ) = *( t + i );

是可以实现直接在s的后面接上t的内容,但这么做同样有风险,
因为你不能保证s指向的字符串后面的几个字节是空的,
也就是说这么做的同时你覆盖掉了s1后面3个字节的内容,导致数据丢失
严重的话可能会报错。

其实简单的话你直接使用string类来做,C++的string库里重载了+运算,可以直接实现字符串连接

 #include <iostream>
#include <string>
using namespace std;

string s1 = "hello";
string t = "www";

int main()
{
    s1 += t;
    cout << s1;
}

首先,s+5是右值,所以

 s+5=t

连编译都无法通过

其次,s只是一个指向字符串的指针,所以这样肯定不行。

建议用c++(如果你坚持用c的话那只能用memcpy了)的string类

首先说明赋值运算在C和C++中变量才可以赋值,S+5 = t;这是语法错误;等号左边运算后是一个常量,常量是不允许赋值的。C语言中要使S ="hellowww", 需要定义S为一个字符数组然后把s1[]="hello"和char * t="www" 截取存储在S数组中。通过指针改变去访问S1和t是达不到S = “hellowww”效果。在C++中使用字符串连接函数实现字符串拼接,其实也是做的字符拷贝,将t和S1的字符拷贝在S的内存单元从而实现的S地址域是hellowww的字符串,谨记S+5= t是错误语法。

除非内存连续,否则无法做到。
s是"hello"这段内容的首地址,而t是"www"这段内容的首地址,如果地址不连续这两段内容是不能通过指针拼接在一起的。
可以使用strcat()或者sprintf将字符串拼接,你这样直接操作指针容易出错也没有必要