字符串数组指针(字符串指针数组)

本文目录
字符串指针数组
char na = {“li“, “zh“, “li“, “zh“, “li“}; 或者char na = {“li“, “zh“, “li“, “zh“, “li“};
这样才行,因为你有5个字符串,每个字符串占用3个字节(最后一个字节是结束符)。每个char类型变量只能对应1个字节(一个字符)。char na是指向第一个字符串“li“首地址的指针,char na是指向第2个字符串“zh“首地址的指针。na = ’m’; 这样可以把第一个字符串修改为“lm“ 。
char* na[N] = {“li“, “zh“, “li“, “zh“, “li“};
这种定义方式虽然也行,但是每个指针指向的字符串是const类型的,没有办法改写其中的内容,这个需要了解。
字符串数组与字符指针的区别
一、 读写能力
char *a = “abcd”; 此时“abcd“存放在常量区。通过指针只可以访问字符串常量,而不可以改变它。
而char a = “abcd”; 此时 “abcd“存放在栈。可以通过指针去访问和修改数组内容。
二、用法
在编程过程中如果只涉及到对字符串的读取,那么字符数组和字符串常量都能够满足要求,如果有写入(修改)操作,那么只能使用字符数组,不能使用字符串常量。
C语言有两种表示字符串的方法,一种是字符数组,另一种是字符串常量,它们在内存中的存储位置不同,使得字符数组可以读取和修改,而字符串常量只能读取不能修改。
三、存取效率
char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快,因此慢。
而char a = “abcd”; 存于栈上,更快。
怎么用指针表示一个字符串数组
#include《stdio.h》;
#include《string.h》;
int main()
{
char c, s, *p;
int a=1234, *i;
float f=3.141592653589;
double x=0.12345678987654321;
p=“How do you do“;
strcpy(s, “Hello, Comrade“;
*i=12;
c=’\x41’;
printf(“a=%d\n“, a); /*结果输出十进制整数a=1234*/
printf(“a=%6d\n“, a); /*结果输出6位十进制数a= 1234*/
printf(“a=%06d\n“, a); /*结果输出6位十进制数a=001234*/
printf(“a=%2d\n“, a); /*a超过2位, 按实际值输出a=1234*/
printf(“*i=%4d\n“, *i); /*输出4位十进制整数*i= 12*/
printf(“*i=%-4d\n“, *i); /*输出左对齐4位十进制整数*i=12*/
printf(“i=%p\n“, i); /*输出地址i=06E4*/
printf(“f=%f\n“, f); /*输出浮点数f=3.141593*/
printf(“f=6.4f\n“, f); /*输出6位其中小数点后4位的浮点数
f=3.1416*/
printf(“x=%lf\n“, x); /*输出长浮点数x=0.123457*/
printf(“x=%18.16lf\n“, x);/*输出18位其中小数点后16位的长浮点
数x=0.1234567898765432*/
printf(“c=%c\n“, c); /*输出字符c=A*/
printf(“c=%x\n“, c); /*输出字符的ASCII码值c=41*/
printf(“s=%s\n“, s); /*输出数组字符串s=Hello, Comrade*/
printf(“s=%6.9s\n“, s);/*输出最多9个字符的字符串s=Hello,
Co*/
printf(“s=%p\n“, s); /*输出数组字符串首字符地址s=FFBE*/
printf(“*p=%s\n“, p); /* 输出指针字符串p=How do you do*/
printf(“p=%p\n“, p); /*输出指针的值p=0194*/
getch();
retunr 0;
}
c语言字符数组指针
#include “stdio.h“
#include “string.h“
void main()
{
char a=““;
char *p=a;
int n,k,pos;
puts(“input the data“);
gets(a);
n=strlen(a);
puts(“the position you want to delete“);
scanf(“%d“,&k);
for (p=&a[k-1];p《=a+n;p++)
{
char temp;
temp=*p;
*p=*(p+1);
*(p+1)=temp;
}
*p=0;
puts(a);
}
#include “stdio.h“
#include “string.h“
void main()
{
char a=““;
char *p;
char *max;
for (int i=0;i《5;i++)
{
p[i]=&a[i];
}
puts(“input five num“);
for (i=0;i《5;i++)
{
fflush(stdin);
scanf(“%c“,&a[i]);
}
for (i=0,max=p[i];i《5;i++)
{
if (*p[i]》*max)
{
*max=*p[i];
}
}
printf(“%c“,*max);}
C语言中字符串数组与字符指针数组有什么区别怎么用
我认为:char a = “I love you“; // 注意\0
编译器将string放在栈中。 a是一个地址常量,它指向string的第一个字节。
char * b = “I miss you“;
在栈中分配一个指针(一个指针在栈中被分配4个字节),在堆中分配一个string,将指针指向string。
补充:一个string,在内存中存放的时候,编译器会默认加上’\0’,当作字符串的结束标志。
回答完毕,求采纳。
C语言字符串数组指针的传递
简单写了一个,供参考
#include
《stdio.h》
#include
《string.h》
struct
data
{
int
n;
char
name;
};
//传入一个字符串指针name,给结构体相应变量赋值
void
cp_str(
char
*name
,
int
n
)
{
struct
data
st;
strcpy(
st.name
,
name
);
st.n=n;
}
//输入数据,完成字符串的录入
void
input_str()
{
int
i=0;
for(i=0;i《10;i++)
{
scanf(“%s“
,name
);
cp_str(
name
,
i
);
}
}
//主程序
int
main()
{
input_str();
return
0;
}

更多文章:
turtles歌曲(哪位大神有turtles(乌龟组合)的<谢谢>的歌词中文翻译 感激不尽)
2026年10月11日 10:00
金山铁路22号线(请问现在轨道交通22号线金山铁路是个什么情况据说9月28日就开通了啊~~~)
2026年10月11日 09:10
repercussions(都是余波,repercussions和aftermath有什么区别啊)
2026年10月11日 09:00
dropdownlist 绑定(DropDownList 绑定所有项 并 显示指定项)
2026年10月11日 08:50
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40





