c语言指针数组赋值
⑴ c语言中将一个数组的值赋给另外一个数组,好像要用指针来赋值
错误的,不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
chars[20];
charss[]="hello";
s=ss;错误原因是:是您不能使用赋值语句将一个字符数组直接赋值给一个字符串数组,也就是说,必须使用strcpy()函数来实现一个字符串的副本(在c语言中,但是在c++的string类中,上面的赋值是正确的)。
因为赋值字符“=”右边的表达式也可以是赋值表达式,下面的形式变量是=(变量=表达式);这是真的,所以它是嵌套的。展开后的一般形式为:variable=variable=…=表达式;例如:a=b=c=d=e=5;根据赋值运算符的正确啮合,其有效等价为:e=5;D=e;C=d.B=C.A=B;
Chara[]="toyou";正确的理由:因为当你声明一个数组变量时,你只是为它腾出空间并初始化它,这是c语法。
⑵ C语言指针赋值的问题(关于数组的赋值)
指针只是申明了而没有初始化。
p是指针,*p是取p指向的地址的内容。
你可以这样写:
char
c
=
0;
char
*p
=
&c;
//初始化
*p
=
s[0];
也可以这样写:
char
*p
=
&s[0];//初始化
或者
char
*p
=
new
char(s[0]);//分配内存,初始化
delete
p;
也可以这样写:
char
s[0];
char
*p
=
s;//p指向s数组
⑶ C语言字符指针数组赋值问题
char*
p_str[3],p_str是一个指针数组。
修改前,实际存储空间只有数组a,p_str中的三个指针都为a的地址,所以后面输入的会把前面的覆盖,而且输出时都是a中的内容。
修改后
p_str[i]=(char*)malloc(sizeof(p_str)*10);
p_str中的指针指向新分配的存储空间了,但是为嘛下一句输入却要用p呢?这不搭配,scanf("%s",p_str[i])
才和这句搭配。另外sizeof(p_str)是12,因为是一个存放3个指针的数组。似乎和逻辑不符合,应该是sizeof(char)才对。
//scanf("%s",p);
//p_str[i]=p;
或者可以改成这样
for(int i=0; i<3; i++)
{
p = (char*)malloc(sizeof(char)*10);
scanf("%s", p);
p_str[i] = p;
}
⑷ C语言 怎么把指针的值 赋给另一个数组
1.
不能把数组的首地址赋给另一个数组。因为数组名是常量指针类型,初始化之后是不能够被修改的。
2.
有两种办法实现类似功能,一种是创建指针变量,把地址直接赋值指针变量:
例如
int
a[100];
int
*b=a;
第二种就是直接用循环一一复制每个元素。
例如
for(i=0;i
评论
0
0
加载更多
⑸ c语言结构体中指针数组怎样赋值
看Unix/Linux上的man:
Standard
C
Library
Functions
gets(3C)
NAME
gets,
fgets
-
get
a
string
from
a
stream
SYNOPSIS
#include
char
*gets(char
*s);
char
*fgets(char
*s,
int
n,
FILE
*stream);
DESCRIPTION
The
gets()
function
reads
bytes
from
the
standard
input
stream
(see
intro(3)),
stdin,
into
the
array
pointed
to
by
s,
until
a
newline
character
is
read
or
an
end-of-file
con-
dition
is
encountered.
The
newline
character
is
discarded
and
the
string
is
terminated
with
a
null
byte.
....
gets是标准库函数,要求传入的是一个数组的地址。其实是要求caller应当分配空间给他。你的结构体中指针数组指向了已经分配好的内存吗?如果没有就别想了。想用就自己先给他空间
⑹ C语言如何给指针数组动态赋值
可以试试再创建一个char类型的二维数组,如char
temp[16][16],然后分别把temp[0
...
15]的每一个元素temp[...][0...14]赋上'a'
+
随机数值(0
~
25的)。再把temp[...][15]赋值为'\0'。最后把str[0...15]分别指向temp[0...15]
⑺ 请问C语言 char类型的指针要怎么赋值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *source = malloc(20*sizeof(char);
printf("Please input source \n");
scanf("%s",source);//f方法三
printf("%s\n",source);
char *temp = "my input source"
sprintf(source,"%s",temp);//方法一
printf("%s\n",source);
strcpy(source,temp);//方法二
printf("%s\n",source);
return 0 ;
}
指针是无法存放字符串的,只有指针指向的那块空间才能存放字符串,所以我第一句话给它开辟了20个空间,这样就可以给指针指向的那块空间赋值了,谢谢
另外给你一个建议 char *a = NULL,*b =NULL,*c =NULL;这样的写法是不规范的,很容易出错。标准形式应该是char *a= NULL;
char *b = NULL;
char *c = NULL;
⑻ C语言 如何给字符指针数组赋值
你那样只是定义了5个指针,并没有给每个指针分配相应的内存空间,当然会出错
gets函数的参数是一个字符指针,应该用gets(p[i]);
char
*p[5];
char
*d;
char
p1[5][20];
int
i,j;
printf("输入5个城市\n");
for(i=0;i<5;i++)
{
p[i]
=
p1[i];
gets(p[i]);
}
.......
⑼ C语言指针的赋值问题
指针在用要注意初始化,例如:
int *p;
p为指针,地址是未知的,如果直接赋值
*p=a;这样编译可以通过,但是会产生警告,p的地址是随机分配的,这样对未知的地址赋值很危险,可能会覆盖掉某些重要数据,所以避免这种危险,在定义指针时注意初始化,也就是赋值。
可以int *p=&a;
或者int *p;
p=&a;
然后再对p进行操作
有错。
注意大小写,还有
int a=9;
int *p;
p=&a;//这个是指针指向a
*p=8;
这样就对了。
(9)c语言指针数组赋值扩展阅读:
指针的赋值
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数能够是*p,也能够是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //注意啦,p1指向了val2,而没有指向val1
备注:字符串与指针的初始化和赋值
初始化:
char *cp = "abcdefg"; //这个初始化过程,是将指针cp指向字符串的首地址,而并非传递字符串的值。由于,在C语言里面,没有总体处理一个字符串的机制
赋值:
cp = "abcdefg";
*cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不能够通过*cp改动该字符串的值,由于该字符串为常量,而它仅仅是简单的将指针指向该字符串常量。
⑽ 请问在c语言中如何通过输入字符串为字符指针数组赋值
首先确定是字符指针数组还是字符数组指针,前者是一个数组,数组每个元素都是一个字符指针,后者是一个指向字符数组的指针。
若是指向字符数组的指针,则很简单,使用scanf("%s",
str);函数获取输入的字符串,然后使用字符串拷贝函数strcpy(stc,
dest);将获取的字符串拷贝到指定地址的字符指针数组中,拷贝过程中注意检查访问数组是否越界,若越界,则需要在字符数组的最后一个元素赋值为结束符'\0'。
若是赋值
字符指针数组,那么就是对数组中的某一个元素指向的字符数组进行拷贝赋值,其过程与前者相同。